package task

import (
	"gorm.io/gorm"

	"torler.com/qingyue/common/types"
)

// TaskInfo 任务定义信息
//
// 记录任务的配置信息
type TaskInfo struct {
	Id         types.TableId    `gorm:"primaryKey;autoIncrement"`                  // 自增ID,主键,自动递增
	TaskId     string           `gorm:"column:tid;type:varchar(32);uniqueIndex"`   // 任务唯一ID
	PId        string           `gorm:"column:pid;type:varchar(32)"`               //  任务父ID
	TaskName   types.TaskName   `gorm:"column:task_name;type:varchar(50)"`         // 任务名称
	Single     bool             `gorm:"column:single;type:tinyint(1);default:0"`   // 是否为单例任务
	RunMode    types.RunMode    `gorm:"column:run_mode;type:tinyint(1);default:0"` // 运行模式
	Corn       TaskCorn         `gorm:"column:corn;type:varchar(20)"`              // cron表达式
	Priority   int              `gorm:"column:priority;type:int(4);default:0"`     // 优先级
	RunnerName types.RunnerName `gorm:"column:runner_name;type:varchar(50)"`       // 运行器名称
	Params     string           `gorm:"column:params;type:text"`                   // 运行参数
	Enabled    bool             `gorm:"column:enabled;type:tinyint(1);default:1"`  // 是否启用
	Desc       string           `gorm:"column:desc;type:varchar(255)"`             // 任务描述
	types.Basic
}

func (taskInfo *TaskInfo) TableName() string {
	return "sp_task_info"
}

// 保存任务定义信息
func (taskInfo *TaskInfo) Save(db *gorm.DB) error {
	return db.Save(taskInfo).Error
}

// 根据任务ID查找任务信息
func GetTaskInfoByTaskId(db *gorm.DB, taskId string) *TaskInfo {
	var taskInfo TaskInfo
	err := db.Where("tid = ?", taskId).First(&taskInfo).Error
	if err != nil || taskInfo.Id == 0 {
		return nil
	}
	return &taskInfo
}

// 获取所有启用的任务
func GetAllEnabledTasks(db *gorm.DB) ([]*TaskInfo, error) {
	var tasks []*TaskInfo
	err := db.Where("enabled = ?", true).Find(&tasks).Error
	return tasks, err
}
